// 日志级别

#ifndef __M_LEVEL_H__
#define __M_LEVEL_H__

#include <string>

namespace snowdragon
{
    class LogLevel // 用一个类封装起来，更美观些
    {
    public:
        enum class Level        // 日志级别
        {
            UNKNOWN = 0,
            DEBUG,      // 调式消息
            INFO,       // 提示信息
            WARN,       // 警告信息
            ERROR,      // 错误信息
            FATAL,      // 致命信息
            OFF         // 关闭所有日志输出
        };

        // 类型使用const char*更好些
        // 将日志级别转换为字符串
        static const char *levelToString(LogLevel::Level level) // 参数无需加snowdragon::，因为都是同一作用域
        {
            switch (level)
            {
#define TOSTRING(name) #name
            case LogLevel::Level::DEBUG:
                return TOSTRING(DEBUG);
            case LogLevel::Level::INFO:
                return TOSTRING(INFO);
            case LogLevel::Level::WARN:
                return TOSTRING(WARN);
            case LogLevel::Level::ERROR:
                return TOSTRING(ERROR);
            case LogLevel::Level::FATAL:
                return TOSTRING(FATAL);
            case LogLevel::Level::OFF:
                return TOSTRING(OFF);
#undef TOSTRING
            }
            return "UNKNOWN";       // 不是上方日志级别所定义的任何一个，是未知的
        }
    };
}

#endif